]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
data: Generate dash/app-grid defaults from text files
authorFlorian Müllner <fmuellner@gnome.org>
Fri, 7 Feb 2025 14:01:48 +0000 (15:01 +0100)
committerMarge Bot <marge-bot@gnome.org>
Thu, 13 Feb 2025 19:59:17 +0000 (19:59 +0000)
Defining default apps as serialized GVariants isn't very human-friendly,
which likely contributes to the fact that the lists are in parts horribly
outdated (Books! Cheese! Screenshot! gedit!).

Instead, generate the lists at build time from simple text files, which
should be much easier to update.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3632>

data/default-apps/app-grid.txt [new file with mode: 0644]
data/default-apps/dash.txt [new file with mode: 0644]
data/default-apps/utilities-folder.txt [new file with mode: 0644]
data/meson.build
data/org.gnome.shell.gschema.xml.in
js/misc/config.js.in
js/misc/meson.build
js/ui/appDisplay.js
meson.build
meson/generate-app-list.py [new file with mode: 0755]

diff --git a/data/default-apps/app-grid.txt b/data/default-apps/app-grid.txt
new file mode 100644 (file)
index 0000000..d78ed16
--- /dev/null
@@ -0,0 +1,21 @@
+org.gnome.Geary.desktop
+org.gnome.Contacts.desktop
+org.gnome.Weather.desktop
+org.gnome.clocks.desktop
+org.gnome.Maps.desktop
+org.gnome.Books.desktop
+org.gnome.Photos.desktop
+org.gnome.Totem.desktop
+org.gnome.Calculator.desktop
+org.gnome.gedit.desktop
+simple-scan.desktop
+org.gnome.Settings.desktop
+org.gnome.SystemMonitor.desktop
+org.gnome.Boxes.desktop
+org.gnome.Terminal.desktop
+Utilities # folder
+org.gnome.Characters.desktop
+yelp.desktop
+org.gnome.Screenshot.desktop
+org.gnome.Cheese.desktop
+org.gnome.font-viewer.desktop
diff --git a/data/default-apps/dash.txt b/data/default-apps/dash.txt
new file mode 100644 (file)
index 0000000..2a8e8bc
--- /dev/null
@@ -0,0 +1,6 @@
+org.gnome.Epiphany.desktop
+org.gnome.Calendar.desktop
+org.gnome.Music.desktop
+gnome.Nautilus.desktop
+org.gnome.Software.desktop
+org.gnome.TextEditor.desktop
diff --git a/data/default-apps/utilities-folder.txt b/data/default-apps/utilities-folder.txt
new file mode 100644 (file)
index 0000000..6169977
--- /dev/null
@@ -0,0 +1,17 @@
+# Sorted by name as shown in menus, not filename
+nm-connection-editor.desktop              # Advanced Network Configuration
+org.gnome.DejaDup.desktop                 # Backups
+org.gnome.Characters.desktop              # Characters
+org.gnome.Connections.desktop             # Connections
+org.gnome.DiskUtility.desktop             # Disks
+org.gnome.baobab.desktop                  # Disk Usage Analyzer
+org.gnome.Evince.desktop                  # Document Viewer
+org.gnome.FileRoller.desktop              # File Roller
+org.gnome.font-viewer.desktop             # Fonts
+org.gnome.Loupe.desktop                   # Image Viewer
+org.gnome.Logs.desktop                    # Logs
+org.freedesktop.MalcontentControl.desktop # Parental Controls
+org.gnome.seahorse.Application.desktop    # Passwords and Keys
+org.freedesktop.GnomeAbrt.desktop         # Problem Reporting
+org.gnome.tweaks.desktop                  # Tweaks
+org.gnome.Usage.desktop                   # Usage
index c8f82bd753b5673c277a09782448def80dcf5d22..338ea70537d56234f8ec0889e172b4d6ee90cec9 100644 (file)
@@ -100,6 +100,14 @@ install_data(keybinding_files, install_dir: keysdir)
 
 schemaconf = configuration_data()
 schemaconf.set('GETTEXT_PACKAGE', meson.project_name())
+schemaconf.set('DASH_APPS', run_command(
+  generate_app_list, 'default-apps/dash.txt',
+  check: true,
+).stdout())
+schemaconf.set('APP_GRID_APPS', run_command(
+  generate_app_list, '--pages', 'default-apps/app-grid.txt',
+  check: true,
+).stdout())
 schema = configure_file(
   input: 'org.gnome.shell.gschema.xml.in',
   output: 'org.gnome.shell.gschema.xml',
index 3cd37692a7e07604805d21f0357c57803421ce01..b1c2534f9c70b51ae7ae5635a463201f773d0d0b 100644 (file)
@@ -61,7 +61,9 @@
       </description>
     </key>
     <key name="favorite-apps" type="as">
-      <default>[ 'org.gnome.Epiphany.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Music.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop', 'org.gnome.TextEditor.desktop']</default>
+      <default>
+        @DASH_APPS@
+      </default>
       <summary>List of desktop file IDs for favorite applications</summary>
       <description>
         The applications corresponding to these identifiers
     </key>
     <key name="app-picker-layout" type="aa{sv}">
       <default><![CDATA[
-        [{
-          'org.gnome.Geary.desktop': <{'position': <0>}>,
-          'org.gnome.Contacts.desktop': <{'position': <1>}>,
-          'org.gnome.Weather.desktop': <{'position': <2>}>,
-          'org.gnome.clocks.desktop': <{'position': <3>}>,
-          'org.gnome.Maps.desktop': <{'position': <4>}>,
-          'org.gnome.Books.desktop': <{'position': <5>}>,
-          'org.gnome.Photos.desktop': <{'position': <6>}>,
-          'org.gnome.Totem.desktop': <{'position': <7>}>,
-          'org.gnome.Calculator.desktop': <{'position': <8>}>,
-          'org.gnome.gedit.desktop': <{'position': <9>}>,
-          'simple-scan.desktop': <{'position': <10>}>,
-          'org.gnome.Settings.desktop': <{'position': <11>}>,
-          'org.gnome.SystemMonitor.desktop': <{'position': <12>}>,
-          'org.gnome.Boxes.desktop': <{'position': <13>}>,
-          'org.gnome.Terminal.desktop': <{'position': <14>}>,
-          'Utilities': <{'position': <15>}>,
-          'org.gnome.Characters.desktop': <{'position': <16>}>,
-          'yelp.desktop': <{'position': <17>}>,
-          'org.gnome.Screenshot.desktop': <{'position': <18>}>,
-          'org.gnome.Cheese.desktop': <{'position': <19>}>,
-          'org.gnome.font-viewer.desktop': <{'position': <20>}>
-        }]
+        @APP_GRID_APPS@
       ]]></default>
       <summary>Layout of the app picker</summary>
       <description>
index a5069e438ab028ccb02d54ad44e4503d2cd3e02f..6485d614f531f4ecd599b4c0d829cd0aa34cca6a 100644 (file)
@@ -20,3 +20,5 @@ export const LIBMUTTER_API_VERSION = '@LIBMUTTER_API_VERSION@';
 
 export const HAVE_BLUETOOTH = pkg.checkSymbol('GnomeBluetooth', '3.0',
     'Client.default_adapter_state');
+
+export const UTILITIES_FOLDER_APPS = @UTILS_FOLDER_APPS@;
index 5fc8ca433fa3303ab741d93d35c6faa35f44d20b..4b137ef3e69a81416794ae402ac9dacda7bf671f 100644 (file)
@@ -5,6 +5,10 @@ jsconf.set('GETTEXT_PACKAGE', meson.project_name())
 jsconf.set('LIBMUTTER_API_VERSION', mutter_api_version)
 jsconf.set10('HAVE_NETWORKMANAGER', have_networkmanager)
 jsconf.set10('HAVE_PORTAL_HELPER', have_portal_helper)
+jsconf.set('UTILS_FOLDER_APPS', run_command(
+  generate_app_list, '../../data/default-apps/utilities-folder.txt',
+  check: true,
+).stdout())
 jsconf.set('datadir', datadir)
 jsconf.set('libexecdir', libexecdir)
 
index 6f07b94cd5c9d2864d1d73a53175fcbae4de39cf..9801b71340552b277928ac3266a98c857fa630cd 100644 (file)
@@ -24,6 +24,8 @@ import * as SystemActions from '../misc/systemActions.js';
 
 import * as Main from './main.js';
 
+import {UTILITIES_FOLDER_APPS} from '../misc/config.js';
+
 const MENU_POPUP_TIMEOUT = 600;
 const POPDOWN_DIALOG_TIMEOUT = 500;
 
@@ -59,25 +61,7 @@ const DIALOG_SHADE_HIGHLIGHT = new Cogl.Color({red: 0, green: 0, blue: 0, alpha:
 const DEFAULT_FOLDERS = {
     'Utilities': {
         name: 'X-GNOME-Shell-Utilities.directory',
-        apps: [
-            // Sorted by name as shown in menus, not filename
-            'nm-connection-editor.desktop', // Advanced Network Configuration
-            'org.gnome.DejaDup.desktop', // Backups
-            'org.gnome.Characters.desktop', // Characters
-            'org.gnome.Connections.desktop', // Connections
-            'org.gnome.DiskUtility.desktop', // Disks
-            'org.gnome.baobab.desktop', // Disk Usage Analyzer
-            'org.gnome.Evince.desktop', // Document Viewer
-            'org.gnome.FileRoller.desktop', // File Roller
-            'org.gnome.font-viewer.desktop', // Fonts
-            'org.gnome.Loupe.desktop', // Image Viewer
-            'org.gnome.Logs.desktop', // Logs
-            'org.freedesktop.MalcontentControl.desktop', // Parental Controls
-            'org.gnome.seahorse.Application.desktop', // Passwords and Keys
-            'org.freedesktop.GnomeAbrt.desktop', // Problem Reporting
-            'org.gnome.tweaks.desktop', // Tweaks
-            'org.gnome.Usage.desktop', // Usage
-        ],
+        apps: UTILITIES_FOLDER_APPS,
     },
     'YaST': {
         name: 'suse-yast.directory',
index ff3197410a0f1c09c044af2cb8dcfe9cd2e2c90d..4d7bc4c9cc5e5d2ea65bf795d37f488be05096f4 100644 (file)
@@ -142,6 +142,7 @@ endif
 mutter_typelibdir = mutter_dep.get_variable('typelibdir')
 python = find_program('python3')
 gjs = find_program('gjs')
+generate_app_list = find_program('meson/generate-app-list.py')
 
 cc = meson.get_compiler('c')
 
diff --git a/meson/generate-app-list.py b/meson/generate-app-list.py
new file mode 100755 (executable)
index 0000000..067c369
--- /dev/null
@@ -0,0 +1,40 @@
+#!/usr/bin/env python3
+
+import argparse
+
+def read_app_ids(path) -> str:
+    ids = []
+    with open(path, "r") as file:
+        for line in file:
+            # strip comments
+            line, _, _ = line.partition('#');
+            line = line.strip()
+            if len(line) > 0:
+                ids.append(line)
+    return ids
+
+def print_as_array(ids):
+    mapped_ids = list(map(lambda i: f"  '{i}'", ids))
+    print('[')
+    print(',\n'.join(mapped_ids))
+    print(']')
+
+def print_as_pages(ids):
+    mapped_ids = []
+    for i, id in enumerate(ids):
+        mapped_ids.append(f"  '{id}': <{{'position': <{i}>}}>")
+
+    print('[{')
+    print(',\n'.join(mapped_ids))
+    print('}]')
+
+parser = argparse.ArgumentParser()
+parser.add_argument('--pages', action='store_true')
+parser.add_argument('file')
+args = parser.parse_args()
+
+ids = read_app_ids(args.file)
+if args.pages:
+    print_as_pages(ids)
+else:
+    print_as_array(ids)